//package com.slfx.open.api.controller;
//
//
//import cn.hutool.core.collection.CollUtil;
//import com.alibaba.fastjson.JSON;
//import com.baomidou.mybatisplus.extension.api.R;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import io.swagger.annotations.ApiParam;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.http.ContentDisposition;
//import org.springframework.http.HttpHeaders;
//import org.springframework.util.LinkedMultiValueMap;
//import org.springframework.util.MultiValueMap;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.servlet.http.HttpServletRequest;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.Optional;
//
//@RestController
//@Api(tags = "开放平台通用接口", value = "开放平台通用接口")
//@RequestMapping("/openApi/openGeneral")
//@Slf4j
//public class OpenGeneralController {
//
//    @Autowired
//    private OpenMenuPagePropertyService pagePropertyService;
//
//    @Autowired
//    private RestTemplateHandle restTemplateHandle;
//
//    @Value("${forward.test-url}")
//    private String  testUrl;
//    @Value("${forward.prod-url}")
//    private String  prodUrl;
//
//
//    @ApiOperation("开放平台通用接口 接受GET和POST")
//    @RequestMapping(path = "/invokeApi/{param1}/{param2}/{param3}/{param4}/{param5}/{param6}/{param7}", method = {RequestMethod.GET, RequestMethod.POST})
//    public R<Object> invokeApi(HttpServletRequest httpServletRequest, @PathVariable(value = "param1",required = true) String param1
//            , @PathVariable(value = "param2",required = false) String param2
//            , @PathVariable(value = "param3",required = false) String param3
//            , @PathVariable(value = "param4",required = false) String param4
//            , @PathVariable(value = "param5",required = false) String param5
//            , @PathVariable(value = "param6",required = false) String param6
//            , @PathVariable(value = "param7",required = false) String param7
//            , @ApiParam("所属环境") @RequestParam(value = "belong",required = false) String belong
//            , @ApiParam("开发者唯一标识") @RequestParam(value = "mftId",required = false) String mftId
//            , @ApiParam("如果是GET请求就尾巴，如果是post接受尾巴和form表单")@RequestParam(required = false) MultiValueMap<String,Object> param
//            , @ApiParam("如果是GET请求就尾巴")@RequestParam(required = false) Map<String,Object> paramMap
//            , @ApiParam("post接受boyd") @RequestBody(required = false) String body
//            , @ApiParam("文件数组") @RequestPart(required = false) List<MultipartFile> files){
//        belong = StringUtils.isEmpty(belong) ? Optional.ofNullable(httpServletRequest.getAttribute("belong")).orElse("").toString() : belong;
//        StringBuilder str = new StringBuilder();
//        if(StringUtils.isNotEmpty(param1)){
//            str.append(param1);
//            str.append("/");
//        }
//        if(StringUtils.isNotEmpty(param2)){
//            str.append(param2);
//            str.append("/");
//        }
//        if(StringUtils.isNotEmpty(param3)){
//            str.append(param3);
//            str.append("/");
//        }
//        if(StringUtils.isNotEmpty(param4)){
//            str.append(param4);
//            str.append("/");
//        }
//        if(StringUtils.isNotEmpty(param5)){
//            str.append(param5);
//            str.append("/");
//        }
//        if(StringUtils.isNotEmpty(param6)){
//            str.append(param6);
//            str.append("/");
//        }
//        if(StringUtils.isNotEmpty(param7)){
//            str.append(param7);
//        }
//        //获取到请求的路径
//        String requestTailUrl = str.toString();
//        //去数据库匹配尾部路径，得到需要调用的url
//
//        OpenMenuPageProperty pageProperty = this.pagePropertyService.getOne(new QueryWrapper<OpenMenuPageProperty>().lambda().eq(OpenMenuPageProperty::getRequestTailUrl, requestTailUrl));
//        if(pageProperty == null){
//            return R.fail(ErrorCode.REQUEST_NOT_ERROR);
//        }
//        StringBuilder url = new StringBuilder();
//        Map<String , String> headerMap = new HashMap<>();
//        if("test".equals(belong.trim())){
//            headerMap.put("ibs-access-token","0e1ddb0a36f9408498b6b54a0dbdcdfd");
//            url.append(testUrl);
//        }else{
//            headerMap.put("ibs-access-token","0e1ddb0a36f9408498b6b54a0dbdcdfd");
//            url.append(prodUrl);
//        }
//        url.append(requestTailUrl);
//        R<Object> r ;
//        if("GET".equals(pageProperty.getRequestMethod().toUpperCase())){
//            r= (R<Object>) restTemplateHandle.getObject(url.toString(),headerMap, JSON.toJSONString(paramMap),R.class);
//        }else if("POST".equals(pageProperty.getRequestMethod().toUpperCase()) && "json".equals(pageProperty.getRequestPostType())){
//            r = (R<Object>) restTemplateHandle.postToJson(url.toString(),headerMap,body,R.class);
//        }else if("POST".equals(pageProperty.getRequestMethod().toUpperCase()) && "form".equals(pageProperty.getRequestPostType())){
//            if (CollUtil.isNotEmpty(files)) {
//                log.info("open模块接收的图片数量：{}", files.size());
//                files.forEach(multiFile->{
//                    param.add("files", multiFile.getResource());
//                });
//                r = (R<Object>) restTemplateHandle.postUploadFile(url.toString(),headerMap,param);
//            } else {
//                r = (R<Object>) restTemplateHandle.postToForm(url.toString(),headerMap,param,R.class);
//            }
//        }else {
//            return R.fail(ErrorCode.REQUEST_ERROR);
//        }
//        return r;
//    }
//    @ApiOperation("开放平台通用接口 接受GET和POST")
//    @RequestMapping(path = "invokeApi/{param1}/{param2}/{param3}", method = {RequestMethod.GET, RequestMethod.POST})
//    public R<Object> invokeApi(HttpServletRequest httpServletRequest,@PathVariable(value = "param1",required = true) String param1
//            , @PathVariable(value = "param2",required = false) String param2
//            , @PathVariable(value = "param3",required = false) String param3
//    , @ApiParam("所属环境") @RequestParam(value = "belong",required = false) String belong
//            , @ApiParam("开发者唯一标识") @RequestParam(value = "mftId",required = false) String mftId
//            , @ApiParam("如果是GET请求就尾巴，如果是post接受尾巴和form表单")@RequestParam(required = false) MultiValueMap<String,Object> param
//            , @ApiParam("如果是GET请求就尾巴")@RequestParam(required = false) Map<String,Object> paramMap
//            ,@ApiParam("post接受boyd") @RequestBody(required = false) String body){
//        belong = StringUtils.isEmpty(belong) ? Optional.ofNullable(httpServletRequest.getAttribute("belong")).orElse("").toString() : belong;
//        StringBuilder str = new StringBuilder();
//        if(StringUtils.isNotEmpty(param1)){
//            str.append(param1);
//            str.append("/");
//        }
//        if(StringUtils.isNotEmpty(param2)){
//            str.append(param2);
//            str.append("/");
//        }
//        if(StringUtils.isNotEmpty(param3)){
//            str.append(param3);
//        }
//        String requestTailUrl = str.toString();
//        OpenMenuPageProperty pageProperty = this.pagePropertyService.getOne(new QueryWrapper<OpenMenuPageProperty>().lambda().eq(OpenMenuPageProperty::getRequestTailUrl, requestTailUrl));
//        if(pageProperty == null){
//            return R.fail(ErrorCode.REQUEST_NOT_ERROR);
//        }
//        StringBuilder url = new StringBuilder();
//        Map<String , String> headerMap = new HashMap<>();
//        if("test".equals(belong.trim())){
//            headerMap.put("ibs-access-token","0e1ddb0a36f9408498b6b54a0dbdcdfd");
//            url.append(testUrl);
//        }else{
//            headerMap.put("ibs-access-token","0e1ddb0a36f9408498b6b54a0dbdcdfd");
//            url.append(prodUrl);
//        }
//        url.append(requestTailUrl);
//        R<Object> r ;
//        if("GET".equals(pageProperty.getRequestMethod().toUpperCase())){
//
//            r= (R<Object>) restTemplateHandle.getObject(url.toString(),headerMap, JSON.toJSONString(paramMap),R.class);
//        }else if("POST".equals(pageProperty.getRequestMethod().toUpperCase()) && "json".equals(pageProperty.getRequestPostType())){
//
//            r = (R<Object>) restTemplateHandle.postToJson(url.toString(),headerMap,body,R.class);
//        }else if("POST".equals(pageProperty.getRequestMethod().toUpperCase()) && "form".equals(pageProperty.getRequestPostType())){
//
//            r = (R<Object>) restTemplateHandle.postToForm(url.toString(),headerMap,param,R.class);
//        }else {
//            return R.fail(ErrorCode.REQUEST_ERROR);
//        }
//        return r;
//    }
//
//    @ApiOperation("开放平台文件上传通用接口 POST")
//    @RequestMapping(path = "openFileUpload/{param1}/{param2}/{param3}", method =  RequestMethod.POST)
//    public R<Object> fileUpload(@PathVariable(value = "param1",required = true) String param1
//            , @PathVariable(value = "param2",required = false) String param2
//            , @PathVariable(value = "param3",required = false) String param3
//            , @ApiParam("所属环境") @RequestParam(value = "belong",required = false) String belong
//            , @RequestPart("file") MultipartFile file,
//            @RequestParam(value = "fileName", required = false) String fileName){
//        StringBuilder str = new StringBuilder();
//        if(StringUtils.isNotEmpty(param1)){
//            str.append(param1);
//            str.append("/");
//        }
//        if(StringUtils.isNotEmpty(param2)){
//            str.append(param2);
//            str.append("/");
//        }
//        if(StringUtils.isNotEmpty(param3)){
//            str.append(param3);
//        }
//        String requestTailUrl = str.toString();
//        OpenMenuPageProperty pageProperty = this.pagePropertyService.getOne(new QueryWrapper<OpenMenuPageProperty>().lambda().eq(OpenMenuPageProperty::getRequestTailUrl, requestTailUrl));
//        if(pageProperty == null){
//            return R.fail(ErrorCode.REQUEST_NOT_ERROR);
//        }
//        StringBuilder url = new StringBuilder();
//        Map<String , String> headerMap = new HashMap<>();
//        if("test".equals(belong)){
//            headerMap.put("ibs-access-token","0e1ddb0a36f9408498b6b54a0dbdcdfd");
//            url.append(testUrl);
//        }else{
//            headerMap.put("ibs-access-token","0e1ddb0a36f9408498b6b54a0dbdcdfd");
//            url.append(prodUrl);
//        }
//        url.append(requestTailUrl);
//        ContentDisposition contentDisposition = ContentDisposition.builder("form-data")
//                .name("files")
//                .filename(((MultipartFile)file).getOriginalFilename())
//                .build();
//        MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
//
//        body.add(HttpHeaders.CONTENT_DISPOSITION, contentDisposition.toString());
//        body.add("file", ((MultipartFile)file).getResource());
//        body.add("fileName", fileName);
//        body.add("Content-Type", ((MultipartFile)file).getContentType());
//        R<Object> r = (R<Object>) this.restTemplateHandle.postUploadFile(url.toString(),headerMap,body);
//
//        return r;
//    }
//
//
//
//}
